package com.ibeeking.found.upms.g.rest.service;


import com.ibeeking.found.common.entity.CurrentUser;
import com.ibeeking.found.common.entity.GlobalIndustryDTO;
import com.ibeeking.found.upms.api.common.dto.PermissionDTO;
import com.ibeeking.found.upms.service.common.bo.PermissionBO;
import com.ibeeking.found.upms.service.common.dos.PermissionDO;
import com.ibeeking.found.upms.service.common.param.PermissionCopyParam;
import com.ibeeking.found.upms.service.common.param.PermissionParam;
import com.ibeeking.found.upms.service.common.query.PermissionQuery;
import com.ibeeking.found.upms.service.common.vo.CurrentPermissionVO;
import com.ibeeking.found.upms.service.common.vo.FrontEndTypeVO;
import com.ibeeking.found.upms.service.common.vo.PermissionTreeVO;
import com.ibeeking.found.upms.service.common.vo.PermissionVO;

import java.util.List;


/**
 * IGmcPermissionService
 *
 * @Author ibeeking
 * @Date 2020-12-01 18:15
 */
public interface IGmcPermissionService {

    /***
     * 新增
     */
    Boolean add(PermissionParam permissionParam);

    /***
     * 修改
     */
    Boolean modify(PermissionParam permissionParam);

    /***
     * 复制
     */
    Boolean copyFromIndustry(PermissionCopyParam param);
    /***
     * 通过id查询
     */
    PermissionVO view(Long id);

    PermissionBO queryById(Long id);

    /***
     * 修改状态
     */
    Boolean changeStatus(Long id, Integer status, Long modifyBy);

    /***
     * 通过id删除
     */
    Boolean del(Long id);

    /***
     * 基于行业和终端删除
     */
    Boolean clearMenuByIndustry(String industry, String frontend);

    List<PermissionTreeVO> queryList(PermissionQuery permissionQuery);

    List<PermissionTreeVO> queryListCache(PermissionQuery permissionQuery);
    /**
     * 校验菜单名
     *
     * @param name
     * @param parentId
     * @param module
     * @return
     */
    Long checkName(String name, Long parentId, String industry, String module);

    /**
     * 校验权限值
     *
     * @param permission
     * @param module
     * @return
     */
    Long checkPermission(String permission, String module, String industry);

    /**
     * 查询所有
     *
     * @param module
     * @param publishStatus
     * @return
     */
    List<PermissionBO> queryAllList(String module, Integer publishStatus, List<Long> ids);

    List<CurrentPermissionVO> queryEffectiveList(CurrentUser currentUser, String jti);

    List<PermissionDTO> queryByModules(List<String> modules);

    List<GlobalIndustryDTO> queryAllGlobalIndustry(String industry, String frontend);

    FrontEndTypeVO queryFrontEndValid(String industry);

    List<PermissionDTO> queryListByIds(List<Long> ids);

    /**
     * 同步新增权限菜单
     *
     * @param permissionDO
     * @return
     */
    Boolean syncAdd(PermissionDO permissionDO);

    /**
     * 同步修改权限菜单
     *
     * @param permissionDO
     * @return
     */
    Boolean syncModify(PermissionDO permissionDO);

    /**
     * 同步拷贝权限菜单
     *
     * @param permissionDOS
     * @return
     */
    Boolean syncCopy(String industry, String module, List<PermissionDO> permissionDOS);
    /**
     * 同步修改状态
     *
     * @param module
     * @param ids
     * @param status
     * @return
     */
    Boolean syncChangeStatus(String industry, String module,List<Long> ids, Integer status);

    /**
     * 同步删除
     *
     * @param module
     * @param ids
     * @return
     */
    Boolean syncDel(String industry, String module,List<Long> ids);
}
